home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-07-26 | 807 b | 30 lines | [TEXT/gamI] |
- ; N-queens problem
- ;
- ; try: (queens 8 #t)
-
- (##declare (standard-bindings) (fixnum)) ; Compiler: generate fast code
-
- (define (queens n trace?)
-
- (define (1-to n)
- (let loop ((i n) (l '()))
- (if (= i 0) l (loop (- i 1) (cons i l)))))
-
- (define (try x y z)
- (if (null? x)
- (if (null? y) (begin (if trace? (begin (write z) (newline))) 1) 0)
- (let* ((temp1 (if (ok? (car x) 1 z)
- (try (append (cdr x) y) '() (cons (car x) z))
- 0))
- (temp2 (try (cdr x) (cons (car x) y) z)))
- (+ temp1 temp2))))
-
- (define (ok? row dist placed)
- (if (null? placed)
- #t
- (and (not (= (car placed) (+ row dist)))
- (not (= (car placed) (- row dist)))
- (ok? row (+ dist 1) (cdr placed)))))
-
- (try (1-to n) '() '()))
-